using System;

namespace ActivUFRJ.Classes.Busca
{
    public class DBBuscarArtefatos : Connection.MySQL
    {
        public DBBuscarArtefatos() : base(ref Connection.DBConnection.myConnection)
        {

        }

        /*
        internal System.Data.DataTable GetResultadoBuscaDT(ParametrosPessoa pp)
        {
            try
            {
                string SQL = "SELECT usuarios.USR_ID, CONCAT(USR_NOME, ' ', USR_SOBRENOME) as NomeCompleto, USR_DATA_REGISTRO, ai_descricao, ins_descricao, fa_descricao " +
                                "from usuarios " +
                                "inner join areas_de_interesse on usuarios.ai_id = areas_de_interesse.ai_id " +
                                "inner join instituicoes on usuarios.ins_id = instituicoes.ins_id " +
                                "inner join formacoes_academicas on usuarios.fa_id = formacoes_academicas.fa_id " +
                                "where 1 = 1";

                if (pp.AreaTrabalho != null) SQL += " AND usuarios.AI_ID = " + pp.AreaTrabalho.ID.ToString();
                if (pp.FormacaoAcademica != null) SQL += " AND usuarios.FA_ID = " + pp.FormacaoAcademica.ID.ToString();
                if (pp.Instituicao != null) SQL += " AND usuarios.INS_ID = " + pp.Instituicao.ID.ToString();
                if (pp.Nome.Length > 0) SQL += " AND usuarios.USR_Nome like '%" + pp.Nome.Replace("'", "''") + "%' OR usuarios.USR_Sobrenome like '%" + pp.Nome.Replace("'", "''") + "%'";
                //if (pp.AreaInteresse != null) SQL += " AND usuario_areas_de_interesse.ai_id = " + pp.AreaInteresse.ID.ToString();

                this.SetSQL(SQL);
                return this.ReturnTable();
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        */

        internal ResultadoBusca GetResultadoBusca(ParametrosArtefato pa)
        {

            try
            {

                ResultadoBusca resultadoBusca = new ResultadoBusca();

                string SQL = "SELECT artefatos.ART_ID, art_nome, art_descricao, art_DATA_REGISTRO, af_descricao, ai_descricao, COM_Nome, artefatos.COM_ID " +
                                "from artefatos " +
                                "inner join artefato_formatos on artefatos.af_id = artefato_formatos.af_id " +
                                "inner join areas_de_interesse on artefatos.ai_id = areas_de_interesse.ai_id " +
                                "inner join comunidades on artefatos.com_id = comunidades.com_id " +
                                "where 1 = 1";

                if (pa.IdCategoria > 0) SQL += " AND artefatos.AI_ID = " + pa.IdCategoria.ToString();
                if (pa.IdFormato > 0) SQL += " AND artefatos.AF_ID = " + pa.IdFormato.ToString();
                if (pa.Nome != "") SQL += " AND artefatos.ART_Nome like '%" + pa.Nome.Replace("'", "''") + "%' OR artefatos.ART_Descricao like '%" + pa.Nome.Replace("'", "''") + "%'";
                if ((pa.ParametroDataAtualizacao != ParametroData.Qualquer) && (pa.DataAtualizacao != null))
                {
                    switch (pa.ParametroDataAtualizacao)
                    {
                        case ParametroData.DiferenteDe:
                            SQL += " AND artefatos.art_DATA_REGISTRO <> '" + pa.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.IgualA:
                            SQL += " AND artefatos.art_DATA_REGISTRO = '" + pa.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.MaiorQ:
                            SQL += " AND artefatos.art_DATA_REGISTRO > '" + pa.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.MenorQ:
                            SQL += " AND artefatos.art_DATA_REGISTRO < '" + pa.DataAtualizacao.ToString("s") + "'";
                            break;
                    }
                }

                System.DateTime inicioBusca = System.DateTime.Now;
                this.SetSQL(SQL);

                // 1. Tempo de busca
                System.TimeSpan tempoTotal = System.DateTime.Now.Subtract(inicioBusca);
                resultadoBusca.TempoDeBusca = Convert.ToDouble(tempoTotal.Milliseconds)/Convert.ToDouble(1000);

                // 2. Pegar os valores da consulta
                resultadoBusca.ResultadoDT = this.ReturnTable();
                
                // 3. # de linhas afetadas
                resultadoBusca.NumeroRegistros = this.GetRowCount();

                return resultadoBusca;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
